try:
    print('进入了try块。。。。。。。')
    num = 1 / 0
except ZeroDivisionError as e:
    # except IndexError as e:
    print('进入了异常块1。。。。。。。')
    print('报错信息：%s' % e)
except Exception as e:
    print('进入了异常块2。。。。。。。')
    print('抛出异常')
    raise  # 抛出，类比于throws
else:
    print("进入了else块。。。。。。")
finally:
    print("进入了finallly块。。。。")

# try 子句开始执行，若一切正常，则跳过 except 子句；若发生异常，则跳出 try 子句，执行 except 子句。
# 使用 else 子句，则必须将其后接于 except 子句后，且只能有一个 else 子句。else 子句将在 try 子句未发生任何异常时执行。
# 使用 finally 子句，则必须将其后接于最后，且只能有一个 finally 子句。无论异常有无发生，finally 子句都将执行。
# 因此，finally 子句常用于存放一些必定要执行的内容或操作,finally 子句常用于定义无论在任何情况下都会执行的清理行为。
# 若一个异常在 try 子句里 (或在 except 子句和 else 子句里) 被抛出，而又没有任何的 except 子句将其捕获，那么该异常将会在 finally 子句执行后被抛出
